Реализация gRPC-метода RegisterUser в auth-service
Хэширование пароля, создание записи в PostgreSQL без FK-ограничений, динамическое ветвление пространств и генерация TokenPair.
- Репозиторий / Компонент:
auth-service(Backend контура авторизации). - Категория: Бэкенд.
- Контракт методов: gRPC
rpc RegisterUser(RegisterRequest) returns (RegisterResponse); - Спецификация контракта: См. Раздел: Protobuf Контракт: RegisterUser
- Статус: Готово к реализации
В открытом доступе представлена демонстрационная версия задачи. В настоящей публичной документации отображены не все шаги, технические сценарии и приватные эндпоинты для системы цифровых симуляторов бизнес-процессов.
- Полная спецификация метода: Доступна только во внутреннем контуре разработки (Confluence / Swagger Enterprise).
- Для получения доступа: Обратитесь к системному аналитику или Product Owner вашей команды.
- Предварительные условия (Prerequisites):
- Убедиться, что DDL-миграции таблиц
auth_db.users(IAD-MIGRATION-119) иauth_db.sessions(IAD-MIGRATION-120) успешно применены в СУБД. - Обновить сгенерированные серверные gRPC-стабы на основе файла контракта.
- Убедиться, что DDL-миграции таблиц
- Инструкция по шагам:
На Шаге 3 (Валидация): Реализовать gRPC-хэндлер
RegisterUser. Еслиemailилиpasswordне переданы или нарушают формат структуры, прерывать выполнение с ошибкойgRPC Status: INVALID_ARGUMENT.На Шаге 4 (Проверка и создание профиля): Открыть атомарную транзакцию. Проверить уникальность email. Если запись существует, возвращать бизнес-исключение
gRPC Status: ALREADY_EXISTS(код ошибкиERR_EMAIL_ALREADY_EXISTS). Выполнить хэширование пароля в памяти (Bcrypt/Argon2) и выполнить командуINSERT INTO auth_db.users.На Шаге 6 (Изолированное ветвление пространств): На основе флага
space_creation_modeвыполнить прикладную логику:- При режимах
CREATE_NEW_HOME/CREATE_NEW_OFFICEсгенерировать UUID дляhome_group_idи зафиксировать соответствующий флагaccount_type. - При
JOIN_EXISTINGпроверить статусinvite_token. При ошибке возвращать статусNOT_FOUND(кодERR_INVITE_TOKEN_INVALID). Привязать UUID нового пользователя к существующей группе.
- При режимах
На Шаге 7 (Фиксация сессии без FK): Сгенерировать пару токенов, внедрив контекст группы в JWT Claims. Рассчитать SHA-256 хэш от созданного Refresh-токена и записать его в таблицу
auth_db.sessions.ImportantАрхитектурное требованиеСвязывание
user_sessions.user_idс таблицейusersпроизводить исключительно на уровне прикладного кода приложения. Использование физических внешних ключей (FOREIGN KEY) СУБД запрещено для сохранения изоляции микросервисов.Ответ (Шаг 8): Закоммитить транзакцию PostgreSQL и вернуть шлюзу структуру
RegisterResponse.